package br.com.Bolao.application.controller.jogos;

import br.com.Bolao.application.controller.BaseController;
import br.com.Bolao.application.dao.equipes.EquipeDAO;
import br.com.Bolao.application.dao.jogos.JogoDAO;
import br.com.Bolao.model.Equipe;
import br.com.Bolao.model.Jogo;
import java.util.Date;
import java.util.List;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.End;
import org.jboss.seam.annotations.FlushModeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;

/**
 * Controller da página CADASTRO_JOGO.XHTML
 * @author frederico.cruz
 */
@Scope(ScopeType.CONVERSATION)
@Name("jogoCadastroAction")
public class JogosCadastroController extends BaseController {

    @In
    private JogoDAO jogoDAO;
    @In
    private EquipeDAO equipeDAO;
    @In
    private JogosService jogosService;
    private Date paramDataJogo;
    private Integer equipeSelecionada;
    private Integer equipe2Selecionada;
    private List<Equipe> listaEquipes;

    @Begin(flushMode = FlushModeType.MANUAL, nested = true)
    public String setup() {
        listaEquipes = equipeDAO.obterTodos();
        equipeSelecionada = null;
        equipe2Selecionada = null;
        paramDataJogo = null;
        return "cadastro_jogo";
    }

    /**
     * Método que cadastra um jogo
     * @return
     */
    @End
    public void cadastrarJogo() {
        try {
            Jogo jogo = new Jogo();
            jogo.setDataJogo(paramDataJogo);
            jogo.setMarcacaoLimite(false);
            jogo.setTime1(equipeDAO.obterEquipePorId(equipeSelecionada));
            jogo.setTime2(equipeDAO.obterEquipePorId(equipe2Selecionada));
            jogoDAO.salvar(jogo);
            adicionarMensagemInformacao("Jogo cadastrado com sucesso!");

            //Sincronizar novo jogo para os usuarios apostarem
            try {
                jogosService.sincronizaJogoUsuario(jogo);
            } catch (Exception e) {
                adicionarMensagemErro("Erro ao sincronizar jogos para o usuario! " + e.getMessage());
            }

            //Limpar tela
            paramDataJogo = null;
            equipeSelecionada = null;
            equipe2Selecionada = null;
        } catch (Exception e) {
            adicionarMensagemErro("Não foi possível adicionar jogo!\n" + e + "\nEntre em contato com mbsolutions@gmail.com");
        }
    }

    /**
     * GETS e SETS
     */
    public Date getParamDataJogo() {
        return paramDataJogo;
    }

    public void setParamDataJogo(Date paramDataJogo) {
        this.paramDataJogo = paramDataJogo;
    }

    public Integer getEquipe2Selecionada() {
        return equipe2Selecionada;
    }

    public void setEquipe2Selecionada(Integer equipe2Selecionada) {
        this.equipe2Selecionada = equipe2Selecionada;
    }

    public Integer getEquipeSelecionada() {
        return equipeSelecionada;
    }

    public void setEquipeSelecionada(Integer equipeSelecionada) {
        this.equipeSelecionada = equipeSelecionada;
    }

    public List<Equipe> getListaEquipes() {
        return listaEquipes;
    }

    public void setListaEquipes(List<Equipe> listaEquipes) {
        this.listaEquipes = listaEquipes;
    }
}
